﻿package frEngine.primitives
{
    import __AS3__.vec.*;
    import baseEngine.basic.*;
    import baseEngine.core.*;
    import frEngine.core.*;
    import frEngine.render.layer.*;
    import frEngine.shader.filters.*;

    public class FrCrossPlane extends Mesh3D
    {
        private var _w:Number;
        private var _h:Number;
        private var _axis:String;
        private var _surface:FrSurface3D;

        public function FrCrossPlane(param1:String)
        {
            super(param1, true, null);
            this.setMateiralBlendMode(EBlendType.BLEND_LIGHT);
            this.material.materialParams.depthWrite = false;
            this.material.materialParams.twoSided = true;
            this.setLayer(Layer3DManager.AlphaLayer0);
            this._surface = new FrSurface3D("crossPlane");
            this._surface.addVertexData(FilterName_ID.POSITION_ID, 3, false, null);
            this._surface.addVertexData(FilterName_ID.UV_ID, 2, false, null);
            return;
        }// end function

        override public function dispose(param1:Boolean = true) : void
        {
            super.dispose(param1);
            this._surface.download();
            return;
        }// end function

        public function reinit(param1:RenderList, param2:Number = 10, param3:Number = 10, param4:String = "y", param5 = null) : void
        {
            this.renderList = param1;
            this._axis = param4;
            if (!param5)
            {
                param5 = 13421772;
            }
            this._w = param2;
            this._h = param3;
            this.setSurface(0, this._surface);
            this._surface.getVertexBufferByNameId(FilterName_ID.POSITION_ID).vertexVector = this.getVertexVector();
            this._surface.indexVector = this.getIndexVector();
            setMaterial(param5, Texture3D.MIP_NONE, "crossPlane");
            return;
        }// end function

        private function getVertexVector() : Vector.<Number>
        {
            var _loc_1:* = new Vector.<Number>;
            var _loc_2:* = this._w / 2;
            var _loc_3:* = this._h / 2;
            if (this._axis == "y")
            {
                _loc_1.push(_loc_2, _loc_3, 0, 1, 1);
                _loc_1.push(_loc_2, -_loc_3, 0, 0, 1);
                _loc_1.push(-_loc_2, -_loc_3, 0, 0, 0);
                _loc_1.push(-_loc_2, _loc_3, 0, 1, 0);
                _loc_1.push(0, _loc_3, _loc_2, 1, 1);
                _loc_1.push(0, _loc_3, -_loc_2, 1, 0);
                _loc_1.push(0, -_loc_3, -_loc_2, 0, 0);
                _loc_1.push(0, -_loc_3, _loc_2, 0, 1);
            }
            else if (this._axis == "z")
            {
                _loc_1.push(_loc_2, 0, _loc_3, 1, 1);
                _loc_1.push(_loc_2, 0, -_loc_3, 0, 1);
                _loc_1.push(-_loc_2, 0, -_loc_3, 0, 0);
                _loc_1.push(-_loc_2, 0, _loc_3, 1, 0);
                _loc_1.push(0, _loc_2, _loc_3, 1, 1);
                _loc_1.push(0, -_loc_2, _loc_3, 1, 0);
                _loc_1.push(0, -_loc_2, -_loc_3, 0, 0);
                _loc_1.push(0, _loc_2, -_loc_3, 0, 1);
            }
            else
            {
                _loc_1.push(_loc_3, _loc_2, 0, 1, 1);
                _loc_1.push(-_loc_3, _loc_2, 0, 0, 1);
                _loc_1.push(-_loc_3, -_loc_2, 0, 0, 0);
                _loc_1.push(_loc_3, -_loc_2, 0, 1, 0);
                _loc_1.push(_loc_3, 0, _loc_2, 1, 1);
                _loc_1.push(_loc_3, 0, -_loc_2, 1, 0);
                _loc_1.push(-_loc_3, 0, -_loc_2, 0, 0);
                _loc_1.push(-_loc_3, 0, _loc_2, 0, 1);
            }
            return _loc_1;
        }// end function

        private function getIndexVector() : Vector.<uint>
        {
            var _loc_3:int = 0;
            var _loc_1:* = new Vector.<uint>;
            var _loc_2:int = 0;
            while (_loc_2 < 2)
            {
                
                _loc_3 = _loc_2 * 4;
                _loc_1.push(_loc_3, (_loc_3 + 1), _loc_3 + 2);
                _loc_1.push(_loc_3 + 2, _loc_3 + 3, _loc_3);
                _loc_2++;
            }
            return _loc_1;
        }// end function

        public function get height() : Number
        {
            return this._h;
        }// end function

        public function get width() : Number
        {
            return this._w;
        }// end function

    }
}
